package com.yzg.simple.netty.dubbo.netty;

import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.SimpleChannelInboundHandler;

import java.util.concurrent.Callable;

/**
 * @author misterWei
 * @create 2020年01月10号:00点04分
 * @mailbox mynameisweiyan@gmail.com
 *
 * 关于客户端的Handler
 */
public class NettyRpcClientHandler extends SimpleChannelInboundHandler<String> implements Callable {
  // 全局控制这个
   private ChannelHandlerContext handlerContext;
   //这是参数
   private String parms;
  //返回结果
    private String result;


    //确认和服务端建立好链接之后的
    @Override
    public void channelActive(ChannelHandlerContext ctx) throws Exception {
        handlerContext = ctx;
/*
        handlerContext.writeAndFlush("Niao");
*/
    }

    @Override
    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
        ctx.close();
        cause.printStackTrace();
    }

    //读取服务端信息的
    @Override
    protected synchronized void channelRead0(ChannelHandlerContext ctx, String msg) throws Exception {
        //需要做一个唤醒操作 因为要配合call 方法去使用
        result = msg;
        notify();
    }

    //该方法用来 获取返回结果的
    @Override
    public synchronized Object call() throws Exception {

            handlerContext.writeAndFlush(parms);
        wait();
        return result;
    }

    public void setParms(String parms) {
        this.parms = parms;
    }
}
